package com.mec.ServerCluser.core;

import java.net.Socket;

public class AppServerClientConversation extends Communication {
    private AppServerClient client;

    public AppServerClientConversation(Socket socket) {
        super(socket);
    }

    @Override
    protected void dealNetMessage(NetMessage message) {
        //应用服务器会话层对服务器发来消息进行回复
        //会话功能块，根据命令执行不同的操作 这块很适合去用分发器解决。
        //由于项目重点的偏向，将其简单完成。
        ENetCommand command = message.getCommand();
        switch(command) {
            case BOOMBOOM:
                //立即响应其心跳检测
                //此处应该在内部实现，不应该留出接口给外面实现。
                send(new NetMessage()
                        .setFrom(client.getAppServerIp())
                        .setTo(AppServerClient.getRegistryCenterIp())
                        .setCommand(ENetCommand.BOOMBOOMBACK));
                break;
            case REFUSED_ONLINE:
                //应用服务器被拒绝注册，此处应将此信息解析出来后再向上层报告
                //写到这里突然想起来我的框架好像缺了点什么呀。。。
                //不慌，冷静分析一下。这是会话层，在接收到信息之后，需要给他的上层回报的
                //他的上层是谁？应用服务器客户端
                client.getAppServerClientAction().wasRefusedOnline(message.toString());
            default:
                break;
        }
    }

    protected void setClient(AppServerClient client) {
        this.client = client;
    }

    @Override
    protected void peerAbnormalDrop() {
        client.getAppServerClientAction().registryCenterAbnormalDrop();
    }
}
